//两整数之和
/*给你两个整数 a 和 b ，不使用 运算符 + 和 - ​​​​​​​，计算并返回两整数之和。*/
class Solution {
public:
    int getSum(int a, int b) {
        int temp = 0;
        int _temp = 0;
        do {
            _temp = a ^ b;
            temp = (a & b) << 1;
            a = _temp;
            b = temp;
        } while (temp);
        return _temp;
    }
};

//只出现一次的数字 II
/*给你一个整数数组 nums ，除某个元素仅出现 一次 外，其余每个元素都恰出现 三次 。请你找出并返回那个只出现了一次的元素。

你必须设计并实现线性时间复杂度的算法且使用常数级空间来解决此问题。*/

class Solution {
public:
    int singleNumber(vector<int>& nums) {
        int ret = 0;
        for (int i = 0; i < 32; i++) {
            int sum = 0;
            for (auto& num : nums) {
                sum += ((num >> i) & 1);
            }
            if (sum % 3)
                ret |= 1 << i;
        }
        return ret;
    }
};